<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>对象成员查找原则</title>
</head>

<body>
  <script>
    // ========================== 对象成员查找原则 ==========================
    //  1. 先找对象自身，自身有就直接来使用
    //  2. 对象自身没有，就找原型对象
    //  3. 如果原型对象也没有，就沿着原型链继续往上找，直到Object.prototype
    //  4. 如果整个链上都没有，返回undefined
    

    //构造函数
    function Person(name, age) {
      this.name = name
      this.age = age
    }
    //原型对象：父
    Person.prototype.name = 'lw'
    //原型对象：祖父
    Object.prototype.gender = '男'
   
    //实例对象
    let p = new Person() //Person() 无实参，所以{name：undifine  , age：undifine}

    console.log(p.name)    // ?undifine
    console.log(p.age)     // ?undifine
    console.log(p.gender)  // ?男
    console.log(p.sex)     // ?undifine


    // ========================== 拓展：webapi的知识点 ==========================
    //  addEventListener 哪里来的？
    document.addEventListener('click', function () {
      console.log('document is clicked')
    })
    console.dir(document)
    console.dir(document.__proto__)
    console.dir(document.__proto__.__proto__)
    console.dir(document.__proto__.__proto__.__proto__)
    console.dir(document.__proto__.__proto__.__proto__.__proto__)
  </script>
</body>

</html>